/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.Conexao;
import dao.PortalDAOException;
import dao.TelefoneDAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Telefone;

/**
 *
 * @author Tadeu Augusto
 */
public class TelefoneDAOImpl implements TelefoneDAO{
    
    private Connection conn;

    public TelefoneDAOImpl() throws PortalDAOException {
        try {
            this.conn = Conexao.getConnection();
        } catch (Exception e) {
            throw new PortalDAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    @Override
    public void atualizar(Telefone telefone) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (telefone == null) {
            throw new PortalDAOException("Nenhum telefone foi informado.");
        }
        try {
            String sql = "UPDATE telefone SET numero=?, ddd=?, tipo=?"
                    +  "WHERE id=? AND cpfcnpj=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, telefone.getNumero());
            ps.setString(2, telefone.getDdd());
            ps.setString(3, telefone.getTipo());
            ps.setInt(4, telefone.getId());
            ps.setString(5, telefone.getCpfcnpj());
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao atualizar telefone. \n" + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void excluir(Telefone telefone) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (telefone == null) {
            throw new PortalDAOException("Nenhum telefone informado.");
        }
        try {
            String sql = "DELETE FROM telefone WHERE id = ?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, telefone.getId());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao excluir telefone " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public void salvar(Telefone telefone) throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        if (telefone == null) {
            throw new PortalDAOException("Nenhum telefone foi informado.");
        }
        try {
            String sql = "INSERT INTO telefone values (?, ?, ?, ?, ?)";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, telefone.getId());
            ps.setString(2, telefone.getCpfcnpj());
            ps.setString(3, telefone.getNumero());
            ps.setString(4, telefone.getDdd());
            ps.setString(5, telefone.getTipo());
            ps.executeUpdate();
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao inserir telefone " + e);
        } finally {
            Conexao.closeConnection(conn1, ps);
        }
    }

    @Override
    public List todosTelefones() throws PortalDAOException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM telefone";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Telefone> listaTelefones = new ArrayList<Telefone>();
            while (rs.next()) {
                int id = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String numero = rs.getString("numero");
                String ddd = rs.getString("ddd");
                String tipo = rs.getString("tipo");
                listaTelefones.add(new Telefone(id, cpfcnpj, numero, ddd, tipo));
            }
            return listaTelefones;
        } catch (SQLException e) {
            throw new PortalDAOException("Erro ao listar telefones. \n " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Telefone procurarTelefone(int id) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM telefone WHERE id=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            Telefone telefone;
            if( !rs.next()) {
                telefone = new Telefone();
            } else {
                int id1 = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String numero = rs.getString("numero");
                String ddd = rs.getString("ddd");
                String tipo = rs.getString("tipo");
                telefone = new Telefone(id1, cpfcnpj, numero, ddd, tipo);
            }
            return telefone;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar telefone " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
    @Override
    public Telefone procurarTelefone(String ddd, String numero) throws PortalDAOException{
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM evento WHERE ddd=? AND numero=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setString(1, ddd);
            ps.setString(2, numero);
            rs = ps.executeQuery();
            Telefone telefone;
            if( !rs.next()) {
                telefone = new Telefone();
            } else {
                int id = rs.getInt("id");
                String cpfcnpj = rs.getString("cpfcnpj");
                String numero1 = rs.getString("numero");
                String ddd1 = rs.getString("ddd");
                String tipo = rs.getString("tipo");
                telefone = new Telefone(id, cpfcnpj, numero1, ddd1, tipo);
            }
            return telefone;
        } catch (SQLException e){
            throw new PortalDAOException("Erro ao procurar telefone " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }
    
}
